package com.stargate.soft.transaction.reservation;

import java.sql.Date;
import java.sql.SQLException;
import com.stargate.bd.ConnectionBD;
import com.stargate.bd.bean.Reservation;
import com.stargate.bd.dao.factory.ReservationDAO;
import com.stargate.exception.ReservationDerniereSalleDisponibleException;
import com.stargate.exception.ReservationDurantJoursFeriesException;
import com.stargate.exception.SalleDejaReserveeException;
import com.stargate.io.LectureClavier;

public class ReservationSalle {

	private Reservation reservation;

	public ReservationSalle() throws SQLException, SalleDejaReserveeException,
			ReservationDerniereSalleDisponibleException, ReservationDurantJoursFeriesException {
		ConnectionBD.setSerializable();
		init();
		ConnectionBD.commit();
	}

	private void init() throws SQLException, SalleDejaReserveeException,
			ReservationDerniereSalleDisponibleException, ReservationDurantJoursFeriesException {
		// saisie des champs Réservation
		int idGroupePers = LectureClavier.lireEntier("ID groupe personnes :");
		System.out.print("ID groupe batiments : ");
		String codeBat = LectureClavier.lireChaine();
		int numSalle = LectureClavier.lireEntier("Numéro salle :");
		System.out.print("Libellé plage semaine : ");
		String libPlageSem = LectureClavier.lireChaine();
		System.out.print("Libellé plage horaire : ");
		String libPlageHor = LectureClavier.lireChaine();
		Date dateResa = LectureClavier.lireDate("Date réservation :");
		int jourSem = LectureClavier.lireEntier("Jour de la semaine :");

		// création réservation
		reservation = new Reservation(idGroupePers, codeBat, numSalle,
				libPlageSem, libPlageHor, dateResa, jourSem);

		// insertion en BD
		ReservationDAO resaDAO = new ReservationDAO();
		try {
			resaDAO.insert(reservation);
		} catch (SQLException e) {
			if (e.getErrorCode() == SalleDejaReserveeException.ERROR_CODE) {
				throw new SalleDejaReserveeException(e.getMessage());
			} else if (e.getErrorCode() == ReservationDerniereSalleDisponibleException.ERROR_CODE) {
				throw new ReservationDerniereSalleDisponibleException(e.getMessage());
			} else if (e.getErrorCode() == ReservationDurantJoursFeriesException.ERROR_CODE) {
				throw new ReservationDurantJoursFeriesException(e.getMessage());
			} else {
				throw e;
			}
		}

	}

	public Reservation getReservation() {
		return reservation;
	}
}
